home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
CDC
/
CDCSRC.LZH
/
CDRT.S
< prev
next >
Wrap
Text File
|
1995-03-20
|
24KB
|
968 lines
tr5s:
cmpi.w #$40,d0
bcs @f
moveq #-1,d0 *コール無し
rte
@@: movem.l d1-d7/a0-a6,-(sp)
add.w d0,d0
add.w d0,d0
lea tr5tabs(pc),a6
movea.l (a6,d0.w),a6
jsr (a6)
movem.l (sp)+,d1-d7/a0-a6
rte
*---------------------------------------------------
*
* SYSTEM 関係
*
tr5_00: *--------------------------------------------
*_CDC_VERSION equ $00
*
* ・ドライバーのバージョンチェック
*
* [引 数] なし
* [戻り値] d0.l = $0101
*
move.l #$0101,d0
rts
tr5_01: *--------------------------------------------
*_CDC_INIT equ $01
*
* ・CD 及び ドライバーの初期化をします。([CLR]キー同等)
*
* [引 数] なし
* [戻り値] なし
*
* 演奏中止し、モードもクリアします。ただし、プログラム
* は残ります。
*
* [参 考] CD-ROMに対し REZEROUNIT を送りますので多少時間のか
* かる場合があります。割り込み中など処理を早くしたい場
* 合、_CDC_STOP を使用するといいでしょう。
*
jbsr _ZeroUnit
jbsr _CdcModeOn
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
clr.w _LEDVMOD
bsr _FlgClrS
bra tr5_exsub
*---------------------------------------------------
*
* ワークアドレスゲット 関係
*
tr5_02: *--------------------------------------------
*_CDC_STAT equ $02
*
* ・CDの現在の状態の書かれたアドレスを返す
*
* [引 数] なし
* [戻り値] d0.l = ワークアドレス
*
* ( 0) .dc.w 0;NoCD 1;SetCD
* ( 2) .dc.l 状態 0x11;演奏中,0x12;一時停止,0x13;停止
* ( 6) .dc.l 曲番号
* (10) .dc.l 演奏中の曲の経過時間 (MSF型)
* (14) .dc.l CD絶対総 経過時間 (MSF型)
* (18) .dc.l 現在演奏曲のながさ (MSF型)
* (22) .dc.l CD名アドレス
* (26) .dc.l 曲名アドレス
* (30) .dc.l LED文字アドレス -----以下LED部に表示される物
* (34) .dc.l LED数値 曲番号
* (38) .dc.l LED数値 1以上;プログラムナンバー
* 0;表示無し -1;MAX= -2;INP=
* (42) .dc.l LED数値 タイム (MSF型)
* (46) .dc.l LEDの状態
* ┌bit 0 ■:停止
* │bit 1 >:再生
* │bit 2 ||:一時停止
* イズレカ│bit 3 >>:早送り
* └bit 4 <<:巻き戻し
* ┌bit 5 ⊂:オート
* └bit 6 ◯:リピート
* bit 7 R:ランダム
* bit 8 M:メモリー
* (bit 9 B:BGM)
* (bit31 RV:TIME REV)
* (50) .dc.b 入力されている数値(上)
* (51) .dc.b 入力されている数値(下)
*
* 表示LED文字アドレスは基本的に同じアドレスを返してく
* る。内容が変わったかどうかは曲名アドレスを監視するこ
* とで可能。
*
* CDの現在の状態の書かれたアドレスを返します。アドレスは固定さ
* れてますが、トラップの再更新されます。
*
* LED数値 タイムは TIMEREV.モードになっていてもREV.される前の
* 数値がかえります。対応したい場合LEDの状態でチェック、計算し
* てください。
*
* [参 考] CDC.x の機能が停止ているばあい同じ値を返します。
* (LED文字アドレスも0の時もあります。)
* _CDC_POWER($35)でチェックしてください。
*
lea _plyinf-2(pc),a0
lea _CHARBUF(pc),a1 *決まりadd
move.l a1,30(a0) */
lea _CdName(pc),a1
move.w _CDIN(pc),d0 *tst
bne @f
lea NullStr(pc),a1
@@: move.l a1,22(a0)
move.w _CDIN(pc),(a0)
moveq #$13,d1
moveq #0,d0
move.w _TrkNo(pc),d0
move.l d0,6(a0)
beq @f
moveq #$11,d1
move.w _PauseMode(pc),d0 *tst
beq @f
moveq #$12,d1
@@: move.l d1,2(a0)
move.l a0,d0
rts
NullStr:
.dc.b 0,0
.even
tr5_03: *--------------------------------------------
*_CDC_TRACKS equ $03
*
* ・CD-DAのCDの総合時間、曲数、曲の演奏時間、曲名の書かれたアドレスを返す
*
* [引 数] なし
* [戻り値] d0.l = 曲名リストワークアドレス
*
* ( 0) .dc.w 0;NoCD 1;SetCD
* ( 2) .dc.l CDC.xの最大記憶数(以下,記憶数)
* ( 6) .dc.l CDの曲数
* (10) .dc.l CDの全演奏時間
* (14) .dc.l CDCLISTにあったか -1ならあった
* (18) .dcb.b 40,0 CD名 40-1文字
* (58) .dsb.b (記憶数)*40 各曲の名前 40-1文字
* .dsb.l (記憶数) 各曲の演奏時間+拡張曲名flag
* .dsb.l (記憶数) 各曲のスタート時間
* (最上位ビットが立って入れば データトラック)
*
* CD名、曲名以外の書き替えを禁止。名の最後は必ず0を付ける
*
lea _CdcTrak-2(pc),a0
move.w _CDIN(pc),(a0)
move.l a0,d0
rts
*---------------------------------------------------
*
* 外部コントロール用 関係
*
tr5_04: *--------------------------------------------
*_CDC_SCSI_CHK equ $04
*
* ・SCSIの状態を返します。
*
* [引 数] なし
* [戻り値] d0.l = 0 ; 使用可能
* < 0 ; 使用不可
*
* TRAP #5でSCSIを使用するもの場合このコールでチェックしてか
* ら使用してください。
*
bsr ScsiUseChk
beq @f
moveq #-1,d0 * bne :つかえない
rts
@@:
moveq #0,d0 * beq :使える
rts
tr5_05: *--------------------------------------------
*_CDC_RELED equ $05
*
* ・LED部の書き書き直しをします。数値入力のキャンセルも行います。
*
* [引 数] なし
* [戻り値] なし
*
* LEDの書き直しを行います。TRAP #5 でCDC.xを操作した場合
* すぐにLED部(_CDC_STAT のワークも含む)に表れないもの
* があります。TIMER-Cが生きている場合一秒以内には書き
* 直されますが、このコールを使えばすぐに書き直されます。
*
* また、入力された数値のキャンセルも行います。
*
* [参 考] CDCコール番号の $1? はすぐに書き直されるようになって
* ます。
*
bra _B_KLE_D
tr5_06: *--------------------------------------------
rts
*---------------------------------------------------
*
* キーコントロール 関係
*
tr5_07: *--------------------------------------------
*_CDC_INKEY equ $07
*
* ・CDCのキー割り込みルーチンを呼びます
*
* [引 数] d1.b = キーボードコード
* [戻り値] なし
*
* キーボードのコードを送ることでCDCをコントロールします。
*
*┌─┐┌─┐ ┌─┬─┬─┐┌─┬─┬─┬─┐
*│ ││ │ ─┬──┐│ │ │ ││ │記│登│ │
*└─┘└─┘ ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
*┌─┬─┬ ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
*│ES│ │ │ BS ││HM│ │DL││CL│/│*│-│
*├─┴┬┴ ┬┴┬┴┬ ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
*│ TAB│ │E│R│ │[゚│ ││RU│RD│UN││7│8│9│+│
*├──┼ ┴┬┴┬┴ ┴┬┴┐ CR │├─┼─┼─┤├─┼─┼─┼─┤
*│ │]ム│ ││ │↑│ ││4│5│6│=│
* ┴┬┴──┤│←├─┤→│├─┼─┼─┼─┤
* │ ││ │↓│ ││1│2│3│ │
* ┴┬──┘├─┴┬┴─┤├─┼─┼─┤EN│
* │ │ │ ││0│,│.│ │
* ━┘ └──┴──┘└─┴─┴─┴─┘
*
*┌─┐┌─┐ ┌─┬─┬─┐┌─┬─┬─┬─┐
*│ ││ │ ─┬──┐│ │ │ ││ │52│53│ │
*└─┘└─┘ ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
*┌─┬─┬ ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
*│01│ │ │ 0F ││36│ │37││3F│40│41│42│
*├─┴┬┴ ┬┴┬┴┬ ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
*│ 10 │ │13│14│ │1C│ ││38│39│3A││43│44│45│46│
*├──┼ ┴┬┴┬┴ ┴┬┴┐ 1D │├─┼─┼─┤├─┼─┼─┼─┤
*│ │29│ ││ │3C│ ││47│48│49│4A│
* ┴┬┴──┤│3B├─┤3D│├─┼─┼─┼─┤
* │ ││ │3E│ ││4B│4C│4D│ │
* ┴┬──┘├─┴┬┴─┤├─┼─┼─┤4E│
* │ │ │ ││4F│50│51│ │
* ━┘ └──┴──┘└─┴─┴─┴─┘
*
* $3F [CLR] = CDC.x初期化
* $4E [ENT] = 演奏
* $4A [=] = PAUSE/RESUME
* $42/$46 [-][+] = 巻戻し/早送り
* $38 [R-UP] = 1曲戻し *
* $39 [R-DN] = 1曲送り
* $3A [UNDO] = リピートモード
*
* などキー操作と同じ。他に
*
* $52 [記号入力]= 数値入力キャンセル。LEDの初期化にもなる
* (CDC_RELEDと同じ機能です。)
*
* があります(キー操作では出来ないようになってます)。
*
*
* 演奏開始の場合等、他のコールと違うのは入力されている数
* 値に影響される点です。もしこのコールだけで指定の曲演奏
* したい場合、まず、数値キーコードを送ってから演奏すれば
* 可能です。
*
* [-][+](サーチキー)を使う場合は、連続で送ったあと、最後
* に 0 を送ってください。この時サーチ先から演奏されます。
*
* $38は連続でコマンドを送ったりすることで動作が違うので
* 単純に、曲の頭から、1曲戻すと言う場合 _CDC_MVPLAY($13)
* を使用してください。
*
move.l d1,d0 *d0=キーボードコード
beq @f
move.w #1,KeySnsEM
bsr KeySns
clr.w KeySnsEM
rts
@@: move.l _SeekNow(pc),d0 *tst
bmi @f
move.w #1,KeySnsEM
bsr NokeySeek2
clr.w KeySnsEM
@@: rts
*---------------------------------------------------
*
* プログラム関係
*
tr5_08: *--------------------------------------------
*_CDC_PROG equ $08
*
* ・CDCのプログラムワークアドレスを返す
*
* [引 数] なし
* [戻り値] d0.l = メモリワークアドレス
*
* ( 0) .dc.w プログラム数
* ( 2) .ds.b 100,曲ナンバー
*
* プログラムの直接書き替えも可能。ただし、書き替えたあと
* もう一度_CDC_PROGをコールすること
*
* プログラムを全部消去したい場合、プログラム数を0
* に書き替えることで出来ます。
*
moveq #0,d0
bsr _MemChkT
lea _MemLong(pc),a0
move.l a0,d0
rts
tr5_09: *--------------------------------------------
*_CDC_PROGIN equ $09
*
* ・指定曲ナンバーをプログラムに記憶します
*
* [引 数] d1.l = 曲ナンバー
* = -1 ; 現在プログラムされている数のみ返す
* d2.l = プログラムナンバー (0~)
* = -1 ;プログラムの最後に追加します ([.])
* [戻り値] d0.l = 現在プログラムされている数 ; 正常終了
* < 0 ; エラー(プログラム100を越える)
*
tst.l d1
bmi tr5_09E *d1=-1
tst.l d2
bmi tr5_09M
cmpi.l #100,d2
bcs @f
moveq #-1,d0 *d2がおかしい
rts
@@:
lea _MemSock(pc),a1
move.b d1,0(a1,d2.w)
bra tr5_09E
tr5_09M:
*d2=-1
move.w _MemLong(pc),d0
cmpi.w #99,d0
bcs @f
moveq #-1,d0 *これ以上はいらない
rts
@@:
lea _MemSock(pc),a1
move.b d1,0(a1,d0.w)
addq.w #1,_MemLong
tr5_09E:
bsr _MemChkT
moveq #0,d0
move.w _MemLong(pc),d0
rts
tr5_0a: *--------------------------------------------
*_CDC_PROGOUT equ $0A
*
* ・最後のプログラムの曲をプログラムから消します
*
* [引 数] なし
* [戻り値] d0.l = 現在プログラムされている数 ; 正常終了
* < 0 ; エラー
*
move.w _MemLong(pc),d0 *tst
bne @f
moveq #-1,d0
rts
@@: subq.w #1,_MemLong *メモリながさ 0以外ならMEMORY
bsr _MemChkT
moveq #0,d0
rts
tr5_0b: *--------------------------------------------
tr5_0c: *--------------------------------------------
tr5_0d: *--------------------------------------------
tr5_0e: *--------------------------------------------
rts
tr5_0f: *--------------------------------------------
*_CDC_PROGTIME equ $0F
*
* ・プログラムされた曲の総演奏時間を計算します
*
* [引 数] なし
* [戻り値] d0.l = ワークアドレス
* < 0 ; エラー
* ( 0) .dc.l 演奏予定総長さ
* ( 4) .dc.l 演奏された曲の合計長さ
*
* プログラムされて曲の合計と演奏された曲の合計長さ
* を返します。ただし、演奏されていない時は0,0が
* かえります。
* 演奏中にプログラムの変更があると数値がおかしくな
* ることがあります(変更されない)
*
* [参 考]ランダム演奏時にも、ノーマル時にも有効。
*
move.l #tr5_0fwrk,-(sp)
jbsr _ProgTimeCalc
addq.l #4,sp
move.l #tr5_0fwrk,d0
rts
tr5_0fwrk:
.dc.l 0
.dc.l 0
*---------------------------------------------------
*
* 演奏関係
*
tr5_10: *--------------------------------------------
*_CDC_PLAY equ $10
*
* ・曲ナンバー指定によりノーマル演奏開始
*
* [引 数] d1.l = 開始曲ナンバー (0ならCDC管理演奏)
* d2.l = 終了曲ナンバー (-1なら最後まで)
* [戻り値] d0.l = 0 ; 正常終了
* < 0 ; エラー
*
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _ReptMode *0:ノーマル 1:リピート
clr.w _BgmMode *0:ノーマル 1:BGM
tst.l d1
bne @f
bsr _ChkCdRom
bsr Tent_sub
bra tr5_exsub
@@: move.l d2,-(sp)
move.l d1,-(sp)
bsr _ChkCdRom
bsr _CdPlay
addq #8,sp
tst.l d0
bpl @f
rts
@@:
moveq #0,d0
bra tr5_exsub
tr5_11: *--------------------------------------------
*_CDC_PAUSE equ $11
*
* ・CD演奏の一時停止。演奏していない場合何もしません。
*
* [引 数] なし
* [戻り値] なし
*
bsr _ChkCdRom
bsr _StpDsk
move.w #-1,_PauseMode *0:特に 1:ポーズ中
bra tr5_exsub
tr5_12: *--------------------------------------------
*_CDC_RESUME equ $12
*
* ・CD演奏の一時停止の解除。演奏中は何もしません。
*
* [引 数] なし
* [戻り値] なし
*
bsr _ChkCdRom
bsr _Resume
clr.w _PauseMode *0:特に 1:ポーズ中
bra tr5_exsub
tr5_13: *--------------------------------------------
*_CDC_MVPLAY equ $13
*
* ・CD演奏の曲を変えます
*
* [引 数] d1.l = 現在演奏中の曲からの ±値 (-1~1)
* [戻り値] d0.l = 0 ; 正常終了
* < 0 ; エラー
*
* 0を指定することで演奏中の曲を最初から。
* プログラムされている場合、プログラム順に曲を移動、演奏します。
* ランダムモード時は、どの曲にいくか判りません。
*
clr.w _PauseMode *0:特に 1:ポーズ中
move.l d1,-(sp)
bsr _ChkCdRom
bsr _CdPlay_restart
addq #4,sp
bra tr5_exsub
tr5_14: *--------------------------------------------
*_CDC_BGM equ $14
*
* ・指定アドレス間を繰り返し演奏します
*
* [引 数] d1.l = 開始トラックor開始アドレス
* d2.l = 終了アドレス(0ならその曲の最後の数値)
* d3.l = ループアドレス(0ならd1と同じ値に)
* d4.l = ループ終了アドレス(0ならd2と同じ値に)
* [戻り値] d0.l = 0 ; 正常終了
* < 0 ; エラー
*
* d1.lは$100未満であればトラック指定になります。
* d1.lが$100以上であればアドレス指定になります。
*
* _CDC_MODE の戻り値が bit4;BGMが立ちます
*
* [参 考] 基本的に BGMとして CD を使う場合のコールなので
* LED部にBGMモードとは表示されません。
* 使う場合、キーボードからのコントロールを殺したほう
* がいいでしょう。
* ZCDC.x で使用してます。
*
clr.w _PauseMode *0:特に 1:ポーズ中
tst.l d3
bne @f
move.l d1,d3
@@:
tst.l d4
bne @f
move.l d2,d4
@@:
move.l d3,_BgmStAdds
move.l d4,_BgmEdAdds
move.l d2,-(sp)
move.l d1,-(sp)
bsr _ChkCdRom
bsr _FlgClrS
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
bsr _CdPlay
addq #8,sp
tst.l d0
bpl @f
rts
@@:
move.w #-1,_BgmMode *0:ノーマル 1:BGM
bsr _MemChkT
moveq #0,d0
bra tr5_exsub
tr5_15: *--------------------------------------------
*_CDC_STOP equ $15
*
* ・CD演奏を停止します。
*
* [引 数] なし
* [戻り値] なし
*
* _CDC_INIT に比べ高速です。割り込み中など処理が止まる
* のを避けたい場合のみ使用してください。CDC.x内部では
* 停止になりますが、CD-ROM自体の状態は一時停止になりま
* す。また、LEDの書き替えもすぐに行われません。
*
bsr _ChkCdRom
bsr _StpDsk
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
bsr _FlgClrS
bra tr5_exsub
tr5_16: *--------------------------------------------
tr5_17: *--------------------------------------------
tr5_18: *--------------------------------------------
tr5_19: *--------------------------------------------
tr5_1a: *--------------------------------------------
tr5_1b: *--------------------------------------------
tr5_1c: *--------------------------------------------
tr5_1d: *--------------------------------------------
tr5_1e: *--------------------------------------------
tr5_1f: *--------------------------------------------
tr5_20: *--------------------------------------------
tr5_21: *--------------------------------------------
tr5_22: *--------------------------------------------
tr5_23: *--------------------------------------------
tr5_24: *--------------------------------------------
tr5_25: *--------------------------------------------
tr5_26: *--------------------------------------------
tr5_27: *--------------------------------------------
tr5_28: *--------------------------------------------
tr5_29: *--------------------------------------------
tr5_2a: *--------------------------------------------
tr5_2b: *--------------------------------------------
tr5_2c: *--------------------------------------------
tr5_2d: *--------------------------------------------
tr5_2e: *--------------------------------------------
tr5_2f: *--------------------------------------------
rts
*---------------------------------------------------
*
* CDC DRIVE MODE 関係
*
tr5_30: *--------------------------------------------
*_CDC_DRIVE equ $30
*
* ・CDCの心臓を動かす TIMER-Cを乗っ取っていると、CDCが動きません。
* が、直接ある一定期でこれをコールすれば大丈夫です。
*
* [引 数] なし
* [戻り値] なし
*
* [参 考] MUTERMモード対応にも対応してます。が気にすることはないで
* しょう。
*
move.w _ScscUse(pc),d0 *tst
beq @f
rts
@@: move.w $0a0e.w,d1 *現在処理中のIOCSコール番号(なければ-1)
cmpi.w #$F5,d1
bne @f
rts
@@: move.w MuTmMod(pc),d0 *tst *0:ノーマル 1:強引にキーベクタを書き替え
bne @f
bsr LoopChk_
rts
@@: *MUTERMモード
move.l MFP_BAK(pc),d0 *tst
bne tr5_30L
move.l MFP_,d1
cmp.l #MFP,d1
beq @f
move.l MFP_JMP+2(pc),MFP_BAK
move.l MFP_,MFP_JMP+2
move.l #MFP2,MFP_
@@: bra tr5_30E
tr5_30L:
move.l MFP_,d1
cmp.l #MFP2,d1
beq @f
move.l MFP_BAK(pc),MFP_JMP+2
move.l #MFP,MFP_
clr.l MFP_BAK
@@: *bra tr5_30E
tr5_30E
move.w MFP_cmd(pc),d0 *tst
bne @f
bsr NokeySeek
bra tr5_30EE
@@:
move.w #1,IocsSwc
move.w MFP_cmd(pc),d0
move.w MFP_cmd+2(pc),MFP_cmd
clr.w MFP_cmd+2
bsr KeySns
tr5_30EE:
bsr LoopChk
clr.w IocsSwc
rts
MFP2: bra MFP
tr5_31: *--------------------------------------------
*_CDC_MODE equ $31
*
* ・CDCの演奏モードを設定(トグル)
*
* [引 数] d1.l = モード
* = 0 ; オート
* = 1 ; リピート
* = 2 ; ランダム
* = -1 ; モードののみ返す
* [戻り値] d0.l = 現在のモード ; 正常終了
* 現在のモードは
* bit0 :オート
* bit1 :リピート
* bit2 :ランダム
* bit3 :メモリー
* [bit4 :BGM]
*
* 設定は _CDC_INKEY($7)でそれぞれのキーコードを、
* 送った時を同じ処理をします(ただし入力数字は無視
* されます)ので、場合によリ演奏開始されます。
*
* モード変更はトグルで行われるので一度モードを調
* べてから設定したほうがいいでしょう。
*
move.l d1,-(sp)
moveq #0,d0
move.w _AutoMode(pc),d1 *0:ノーマル 1:オート
beq @f
ori.w #%00001,d0
@@: move.w _ReptMode(pc),d1 *0:ノーマル 1:リピート
beq @f
ori.w #%00010,d0
@@: move.w _RndMode(pc),d1 *0:ノーマル 1:ランダム
beq @f
ori.w #%00100,d0
@@: move.w _MemLong(pc),d1 *メモリながさ 0以外ならMEMORY
beq @f
ori.w #%01000,d0
@@: move.w _BgmMode(pc),d1 *0:ノーマル 1:BGM
beq @f
ori.w #%10000,d0
@@:
move.l (sp)+,d1
bpl @f
rts
@@: move.l d0,-(sp)
subq.w #1,d1
bpl @f
*0*
clr.w _DisSuuzi10 * LED用数字クリア
bsr Tauto *オート
bra tr5_31E
@@:
bne @f
*1*
clr.w _DisSuuzi10 * LED用数字クリア
bsr Tundo *リピート
bra tr5_31E
@@:
subq.w #1,d1
bne @f
*2*
bsr Trnd *ランダム
*bra tr5_31E
@@:
tr5_31E:
move.l (sp)+,d0
rts
tr5_32: *--------------------------------------------
*_CDC_KEYMODE equ $32
*
* ・CDCのキー操作関係のモードを設定
*
* [引 数] d1.l = モード
* 0 ; 一切受け付けない (-KS)
* 1 ; 受け付ける
* -1 ; 現在のモードのみ返す
* [戻り値] d0.l = 前のモード ; 正常終了
moveq #0,d0
move.w _KeySwi(pc),d0 *1;キー入力可能 0;不可能
tst.l d1
bpl @f
rts
@@:
move.w d1,_KeySwi
rts
tr5_33: *--------------------------------------------
*_CDC_LED equ $33
*
* ・CDCのLEDの表示モードを設定する
*
* [引 数] d1.l = 0 ; 表示モード
* 1 ; 非表示モード
* = -1 ; 現在の値
* [戻り値] d0.l = 前のモード ; 正常終了
* < 0 ; エラー
*
* 表示モードにしてもTEXTが使われていると表示されません
*
* [参 考] Trapコールで強制LED表示モードはありません
*
moveq #0,d0
move.w _DisMode(pc),d0
andi.l #$01,d0
tst.l d1
bpl @f
rts
@@:
bne @f
clr.w _DisMode *0:表示
rts
@@:
move.l d0,-(sp)
bsr FnkBerChk
beq @f
bsr KillLeds
@@: move.l (sp)+,d0
move.w #1,_DisMode *1:非表示
rts
rts
tr5_34: *--------------------------------------------
*_CDC_TIMING equ $34
*
* ・CDチェックする間隔設定(基本的に使用禁止)
*
* [引 数] d1.l = 1s単位
* = -1 ; 現在の値
* [戻り値] d0.l = 前の値(単位1/10s) ; 正常終了
* < 0 ; エラー
*
* 間隔チェックにはIOCSのTIMER-Cのワークを見ているので
* TIMER-Cを変更している場合、意味がありません。
*
* [参 考] デバグ用なので使用する意味はありません。
*
moveq #0,d0
move.w _KeyTDCT(pc),d0
tst.l d1
bpl @f
rts
@@:
mulu #10,d1
tst.w d1
bne @f
moveq #-1,d0
rts
@@: move.w d1,_KeyTDCT
rts
tr5_35: *--------------------------------------------
*_CDC_POWER equ $35
*
* ・CDC の機能を制御
*
* [引 数] d1.l = 1 ; 機能する
* = 0 ; 停止する ([ESC])
* = -1 ; 現在の値
* [戻り値] d0.l = 前の値 ; 正常終了
* < 0 ; エラー
*
* 機能を停止しても trap#5での操作も可能ですが、
* _CDC_DRIVE を常用する必要があります。
*
moveq #0,d0
move.w _CdcMode(pc),d0
andi.l #$01,d0
tst.l d1
bpl @f
rts
@@:
jbne _CdcModeOn
@@:
move.l d0,-(sp)
bsr FnkBerChk
beq @f
bsr KillLeds
@@: move.l (sp)+,d0
clr.w _CdcMode *0:停止中
clr.w _CDIN *0:CDは入っていない 1:入っている
clr.b _CHARBUF *LED文字
rts
tr5_36: *--------------------------------------------
*_CDC_TRACKMODE equ $36
*
* ・トラック記憶モードを変えます(演奏も停止します)。
*
* [引 数] d1.l = 0 ; タイトルリストファイルを参照、
* 拡張トラック設定
* = 1 ; 拡張トラック設定解除
* [戻り値] なし
*
* タイトルリストファイルからの登録を行います。タイトル
* リストファイルを変更した時これを実行すれば読み込んで
* くれます
*
* [参 考] d1.l==1 は主にZCDC.xで使用します。普通の音楽演奏の場合
* は意味がないでしょう。
*
tst.l d1
bne @f
jbsr _ZeroUnit
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
bsr _FlgClrS
bsr _ChkCdRom
bsr _CdListRead
rts
@@:
jbsr _ZeroUnit
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
bsr _FlgClrS
bsr _CdListSub
rts
tr5_37: *--------------------------------------------
*_CDC_KEYCANSEL equ $37
*
* ・CDCのキー操作無効を個別に設定
*
* [引 数] d1.l = 無効にするキーボードコード
* = -1 ; もとに戻す
* [戻り値] なし
*
* アプリでキーボードからのコントロールが困る物がある場合、特定
* のキーのみ無効に出来ます。アプリ終了時もとに戻すこと。
*
* [参 考] スイッチ -B[n]でもとに戻すことが可能です。
*
tst.l d1
bpl tr5_31L
move.l CmdC_ListD(pc),CmdC_List
move.l CmdC_ListD+4(pc),CmdC_List+4
move.l CmdC_ListD+8(pc),CmdC_List+8
move.l CmdC_ListD+12(pc),CmdC_List+12
rts
tr5_31L:
move.l d1,d0
andi.l #$FFFF_FF80,d0
beq @f
rts **エラー
@@: move.w d1,d0
lsr.w #3,d0
lea CmdC_List(pc),a0
bclr.b d1,(a0,d0.w)
rts
tr5_38: *--------------------------------------------
tr5_39: *--------------------------------------------
tr5_3a: *--------------------------------------------
tr5_3b: *--------------------------------------------
tr5_3c: *--------------------------------------------
tr5_3d: *--------------------------------------------
tr5_3e: *--------------------------------------------
tr5_3f: *--------------------------------------------
rts
tr5_exsub:
move.l d0,-(sp)
clr.w _DisSuuzi10 * LED用数字クリア
bsr FncBarC
bsr FncBar2
bsr FncBar
clr.w _LEDVMOD
move.l (sp)+,d0
rts
*---------------------------------------------------
*
* CDC ERROR CORDS
*
*
* -1 ;
* -2 ; Play Audio Begin ・ Play Audio Block Count Command error'演奏できない'
* -3 ; Start Track Address or ReadTOC Command error'演奏できない'
* -4 ; 指定された曲番号は、存在しない
* -5 ; Leadout Track Address or ReadTOC Command error
* -100 ; CD-ROM でない 準備されていない
*
* 戻り値としてd0が使われていなくても破壊されます.
*
*